Skip to content

fix(dashboard): Bookkeeping-Events nicht mehr als LLM-calls zählen#73

Open
TillQuandel wants to merge 1 commit into
masterfrom
fix/dashboard-eval-honesty
Open

fix(dashboard): Bookkeeping-Events nicht mehr als LLM-calls zählen#73
TillQuandel wants to merge 1 commit into
masterfrom
fix/dashboard-eval-honesty

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Problem

Beim Mahmood-Lauf fiel auf: das Dashboard zeigt den Verifier mit „10 calls / 0 Tokens / 0.0s" — was wie eine Tracking-Lücke aussieht.

Ursache: Die Per-Agent-Aggregation (_read_agent_stats + _live_run_data) zählt jeden JSONL-Trace-Record als „call" — auch reine Bookkeeping-Events ohne LLM-Bezug (anchor_stats, score_result, note_outcome). Echter Trace: 11 verifier-Records = 1 LLM-Call + 10 anchor_stats. Der deterministische Pre-Pass (PR #67) verifiziert Anker meist ohne LLM → 0 Tokens ist korrekt, aber die „10 calls" sind irreführend.

Fix

_is_llm_call_record(r) = "model" in r — Schema-Invariante: _trace (agents/base.py) schreibt für jeden LLM-Call ein model-Feld, trace_event für Bookkeeping ein type-Feld; beide schließen sich aus.

  • _read_agent_stats: Bookkeeping-Records per continue übersprungen.
  • _live_run_data: nur die LLM-Zähler (calls/tokens/dur/errors) gegatet — Timing/last-activity gilt weiter für alle Events (Qwen-Review HIGH: sonst zu früher „letzter Schritt", wenn das letzte Event Bookkeeping ist).
  • Error-Records tragen model → fehlgeschlagene Calls zählen bewusst weiter.

Nicht enthalten

Der KPI-Min-N-Guard („6 Notes 0% als Headline") ist bereits im Frontend abgedeckt (n_notes < 20nWarn, kam mit #59) — kein Backend-Eingriff nötig.

Verifikation

  • TDD: 4 Tests (test_dashboard_honesty.py)
  • Cross-Model: Qwen-reviewt — HIGH (_live_run_data zu aggressiv) + MED (Diskriminator-Robustheit) adressiert; ER-Stage-1-Threshold bei Praefix-dominanten Titeln #2 (Error-Records verlieren model) am echten Trace widerlegt
  • 38 Dashboard-Tests grün

Die Per-Agent-Aggregation (_read_agent_stats + _live_run_data) zählte JEDEN
JSONL-Trace-Record als "call" — auch Bookkeeping-Events ohne LLM-Bezug
(verifier anchor_stats, critic score_result, orchestrator note_outcome).
Folge: der Verifier erschien als "10 calls / 0 Tokens", obwohl er via
deterministischem Pre-Pass meist gar keinen LLM ruft (echter Trace: 11
verifier-Records = 1 LLM-Call + 10 anchor_stats).

Fix: Helper _is_llm_call_record(r) = "model" in r (Schema-Invariante:
_trace schreibt immer model, trace_event immer type, schließen sich aus).
In _read_agent_stats per continue, in _live_run_data nur die LLM-Zähler
gegatet — Timing/last-activity gilt weiter für ALLE Events (Qwen-Review
HIGH: sonst zu früher "letzter Schritt" wenn letztes Event Bookkeeping).

Error-Records tragen model und zählen bewusst weiter (echte Calls). Der
KPI-Min-N-Guard war bereits im Frontend (n_notes<20) — kein Backend nötig.

TDD (4 Tests), Qwen-reviewt, 38 Dashboard-Tests grün.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants